<?php
/************************************************************
 *
 *     name: HtmlTag
 *   author: fenghao
 *     date: 2012-07-04
 * descript: 动态生成Html标签，主要就是为了方便生成HTML代码
 *           这个可当作模板使用
 *    usage: $ht = new MC_HtmlTag("p"); 
 *           $ht->content = "test";
 *           $ht->diplay();  //<p>test</p>
 *
 *           $ht->new MC_HtmlTag("p", array("id"=>"attr_id", "class"=>"attr_class")); 
 *           $ht->content = "test";
 *           $ht->diplay();  //<p id="attr_id" class="attr_class">test</p>
 *
 *           $ht->new MC_HtmlTag("p", array("id"=>"attr_id", "class"=>"attr_class")); 
 *           echo $ht->getArrHtmlCode("test1", "test2", "test3");
 *           //<p id="attr_id" class="attr_class">test1</p>
 *           //<p id="attr_id" class="attr_class">test2</p>
 *           //<p id="attr_id" class="attr_class">test3</p>
 *           
 ************************************************************/
 
class MC_HtmlTag extends MC_Base{
	
    /**
     * 定义非成对出现html标记的数组
     * @const array
     */

    var $html_single_tag = array('br', 'img', 'meta', 'link', 'input');

    /**
     * 定义html行内元素的数组
     * @const array
     */

    var $html_inline_tag = array('a', 'span', 'font');
	
    /**
     * 存放Tag名称
     * @var string
     */

    var $tag_name = '';

    /**
     * 存放属性数组
     * @var array
     */

    var $arr_attribs = '';

	/**
     * 存放当前容器中存放的具体的内容
     * @var string
     */

    public $content = "";
	
    /**
     * 构造函数
     *
     * @param string $_tag_name Html Tag 名称
     * @param array  $_arr_attr 各种属性 格式如下 array("属性名"=>"属性值", "属性名"=>"属性值", ...)
     */
    public function __construct($_tag_name, $_arr_attr = null){
		$this->tag_name = $_tag_name;
		if(is_array($_arr_attr) && !empty($_arr_attr)){
			$this->arr_attribs = $_arr_attr;
		}
    }

    /**
     * __set
     *
     * @param string $key   设置对象属性指定的Key
     * @param mixed $value  设置对象属性指定Key => Value
     * @return void
     */
    public function __set($key, $value) {
        $this->arr_attribs[$key] = $value;
    }
    
    /**
     * __get
     *
     * @param  $key   需要读取对象属性指定
     * @return mixed 返回属性值
     */
    public function __get($key) {
        return $this->arr_attribs[$key];
    }

    /**
     * 给定内容，取得对应的 Html 代码，默认使用类的content属性
     *
     * @param string  给定的内容
     * @return string
     */
	 public function getHtmlCode($_content = null){
		if($_content == null)
			$_content = $this->content;
		 
        //存放临时代码，并取得当前的标签
        $_html_code = "<{$this->tag_name}";
	
		//处理各种属性
		if(is_array($this->arr_attribs) && !empty($this->arr_attribs)){
			foreach($this->arr_attribs as $k=>$v){
      		  $_html_code .= " $k=\"$v\"";
			}
		}
		
        //判断当前的容器是否是单标签
        //单标签就做显示
        if(in_array($this->tag_name, $this->html_single_tag)){
            $_html_code .= " />$_content\n";
        }else{
            $_html_code .= ">$_content</{$this->tag_name}>";
			//判断是否是行内原素
			if(!in_array($this->tag_name, $this->html_inline_tag)){
				 $_html_code .= "\n";
			}
        }

        return $_html_code;

	 }
	 
    /**
     * 显示 Html 代码
     *
     * @return string
     */
	 function display(){
		 echo $this->getHtmlCode();
	 }

    /**
     * 给定一个数组，生成一组Html
     *
     * @param array  $_arr 要生成的内容
     * @return string
     */
	 public function getArrHtmlCode($_arr = null){
		$_html_code = "";
		if(is_array($_arr) && !empty($_arr)){
			foreach($_arr as $v){
				$_html_code .= $this->getHtmlCode($v);
			}
		}

        return $_html_code;

	 }

} 


?>